สรุปขั้นตอนในการเชื่อมต่อไปยัง S3 โดยใช้ MFA ใน Cyberduck (Windows 10/11)
ครั้งนี้ผมจะมาเขียนบทความ สรุปขั้นตอนในการเชื่อมต่อไปยัง S3 โดยใช้ MFA ใน Cyberduck (Windows 10/11)
บทความนี้แปลมาจากบทความที่เป็นภาษาญี่ปุ่นที่ชื่อว่า CyberduckでMFAを利用してS3へ接続するための導入手順まとめ(Windows 10) ซึ่งเจ้าของบทความนี้ก็คือ คุณ inomaso เป็นคนญี่ปุ่นครับ
เนื่องจากว่าบทความนี้แปลมาจากภาษาญี่ปุ่น เมื่อแปลมาเป็นภาษาไทยแล้วผมได้เรียบเรียงเนื้อหาใหม่เพื่อให้เข้าใจง่ายขึ้น ! เมื่อพร้อมแล้วเราไปดูรายละเอียดกันเลยครับ
สวัสดีครับ! ผมชื่อ inomaso (@inomasosan) จากฝ่าย Consulting ครับ
ในกรณีที่ต้องการจัดการดาวโหลดหรืออัปโหลด Objects ของ S3 (ข้อมูล เช่นพวกข้อความและวิดีโอใน Buckets) จะไม่สามารถอัปโหลดหรือดาวน์โหลดทั้งโฟลเดอร์จาก AWS Management Console ได้
เราสามารถจัดการดาวโหลดหรืออัปโหลดทีละโฟลเดอร์ได้ด้วยคำสั่ง AWS CLI แต่ผู้ใช้งานทั่วไปที่ไม่ใช่วิศกรอาจจะไม่คุ้นชินกับเครื่องมือ AWS CLI มากนัก
เราจึงขอแนะนำ Cyberduck ที่เป็นแอปพลิเคชันที่สร้างโดย 3rd Party ที่สามารถทำงานแบบกราฟิกได้ด้วย และเราจะมาสรุปวิธีการใช้งานใน Windows 10/11 กันในบทความครับ
นอกจาก Cyberduck มีเครื่องมืออื่นๆที่รองรับอีกไหม?
ถ้าใช้ Windows เป็นหลัก WinSCP ก็จะรองรับ S3 ด้วย
อย่างไรก็ตาม ดูเหมือนว่า WinSCP จะไม่รองรับ MFA (จะอธิบายในภายหลัง) ดังนั้นครั้งนี้เราจะไม่ใช้มัน
หากต้องการใช้ WinSCP ให้ดูที่ลิงก์บทความด้านล่างนี้
แผนภาพ
นี่คือแผนภาพที่จะตั้งค่าในครั้งนี้
เราสามารถเชื่อมต่อไปยัง S3 ได้ด้วย Access key ของ IAM User และ Secret access key โดยไม่ต้องใช้ IAM Role
อย่างไรก็ตาม กรณีที่ใช้ MFA ใน Cyberduck จำเป็นต้องเพิ่ม AssumeRole ไปยัง IAM Role จาก IAM User
ด้วยการเพิ่ม AssumeRole จะทำให้เราได้รับสิทธิ์ของ IAM Role
หากต้องการทราบรายละเอียดเพิ่มเติม สามารถดูรูปภาพบทความด้านล่างนี้ประกอบความเข้าใจได้ครับ
นอกจากนี้ Access key ของ IAM User เป็นข้อมูลการรับรองความถูกต้องแบบถาวร หากรั่วไหลออกไปยังภายนอกจะส่งผลกระทบอย่างใหญ่หลวง
ในทางกลับกัน กรณีของ IAM Role จะเป็นการสร้างข้อมูลการรับรองความถูกต้องแบบชั่วคราวในขณะที่ใช้งาน จึงทำให้สามารถดำเนินการได้อย่าปลอดภัย
ขั้นตอนฝั่ง AWS
ผมได้สรุปส่วนที่ตั้งค่าของแต่ละ Resource ไว้เรียบร้อยแล้ว
Resource ที่จะสร้างมีดังนี้ (ชื่อเหล่านี้เป็นแค่ตัวอย่าง)
Service Name | Resource Name | Comment |
---|---|---|
S3 Bucket | tinnakorn-s3-mfa | |
IAM Policy | tinnakorn-need-mfa-policy | |
IAM Policy | tinnakorn-assume-role-policy | |
IAM User Group | tinnakorn-s3-mfa-group | tinnakorn-need-mfa-policy, tinnakorn-assume-role-policy |
IAM User | tinnakorn-s3-mfa | Group=tinnakorn-s3-mfa-group, ตั้งค่า MFA |
IAM Role | tinnakorn-s3-mfa-role | AmazonS3FullAccess |
สร้าง S3 Bucket
S3 bucket เป็นเหมือนกล่องสำหรับอัปโหลด Objects
กรณีที่ต้องการทดลองโดยให้ความสำคัญในการเชื่อมต่อกับ S3 เพื่อวัตถุประสงค์ในการตรวจสอบนั้น นอกจากชื่อ Bucket แล้ว การตั้งค่าส่วนอื่นสามารถแก้ไขได้ในภายหลัง เราจึงสามารถใช้การตั้งค่าแบบ Default ในการสร้าง S3 bucket ได้เลย
เช่น การตั้งค่า Bucket Versioning สำหรับกู้คืน Objects จากการดำเนินการที่ผิดพลาดและ Default encryption ของ Objects จะสามารถเปลี่ยนการตั้งค่าได้แม้หลังจากสร้าง S3 Bucket เสร็จแล้ว
สร้าง IAM Policy
เราจะสร้าง Policy ที่จำเป็นจาก IAM Console
1. MFA + การเปลี่ยนรหัสผ่าน
ถ้าเราไม่ได้ตั้งค่า MFA จะเป็นการใช้ policy ที่ไม่สามารถดำเนินการต่างๆนอกจากการตั้งค่า MFA หรือการเปลี่ยนรหัสผ่านได้
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIndividualUserToManageTheirOwnMFA", "Effect": "Allow", "Action": [ "iam:ChangePassword", "iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice", "iam:DeactivateMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:ListMFADevices" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "BlockMostAccessUnlessSignedInWithMFA", "Effect": "Deny", "NotAction": [ "iam:ChangePassword", "iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice", "iam:DeactivateMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:ListMFADevices" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }
อ้างอิง: อย่างน้อยก็ควรใส่สิ่งนี้ ! IAM Policy ที่ปลอดภัย
2. อนุญาต AssumeRole
policy ที่อนุญาต AssumeRole ของ IAM User
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "*" ] } ] }
สร้าง IAM group
เราสามารถใส่ IAM Policy ใน IAM User ได้ แต่จะเกิดความผิดพลาดได้ง่ายเพราะจะยากต่อการจัดการดูแลหากเราต้องปรับเปลี่ยนภารตั้งค่าในแต่ละครั้ง ดังนั้นจึงแนะนำให้สร้าง IAM User ใส่ใน IAM group แทน
1. แนบ IAM Policy
แนบMFA + การเปลี่ยนรหัสผ่าน
และอนุญาต AssumeRole
ที่สร้างเมื่อสักครู่นี้
สร้าง IAM User
1. ประเภท Security credentials ของ AWS
กรณีที่ใช้แค่ Cyberduck จะตรวจสอบแค่ Access key - การเข้าถึงด้วย Program เท่านั้นก็ได้
2.เพิ่ม IAM User ใน IAM group
เลือก IAM group ที่สร้างไว้ก่อนหน้านี้
3. ตั้งค่า MFA
หลังจากสร้าง IAM User แล้ว ให้ดูการตั้งค่า MFA ที่บล็อกด้านล่างนี้
การเก็บรักษา Security credentials ของ Access key ID และ Secret access key
ให้จดบันทึก Access key ID และ Secret access key ที่แสดงบนหน้าจอ เพื่อใช้สำหรับการตั้งค่า AWS CLI ในขั้นตอนต่อไป
โปรดตรวจสอบให้แน่ใจว่าทำการดาวน์โหลด csv
เตรียมไว้แล้ว
คัดลอก ARN ของ Assigned MFA device เตรียมไว้
เมื่อสร้างเสร็จแล้วค้นหาชื่อและเข้ามาที่ IAM User ของเรา แล้วคัดลอก ARN ของ Assigned MFA device เตรียมไว้ เพราะต้องนำไปใช้ในขั้นตอนของ การตั้งค่าไฟล์ credentials (ตอนคัดลอกให้ระวังในส่วนของ (Virtual) เพราะว่าไม่จำเป็นต้องใส่)
การสร้าง IAM Role
1. Select trusted entity
ดูที่ Trusted entity type แล้วเลือกCustom trust policy
ให้ใส่ AWS account ID ที่เป็น IAM User ที่สร้างมาจาก AssumeRole เดิมในAWS account ID
กรณีที่ IAM User ของ AWS account ที่ระบุนั้นใช้ MFA ก็จะทำให้สามารถได้รับสิทธิ์ของ IAM Role ได้ด้วยการตั้งค่า policy นี้
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<AWS account ID>:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] }
2. แนบ Policy IAM
เพิ่มสิทธิ์การเชื่อมต่อให้กับ S3 ด้วยการอนุญาต policy
ครั้งนี้เราจะเพิ่ม AmazonS3FullAccess ที่ทาง AWS ได้มีการจัดเตรียมไว้ให้สำหรับการอนุญาตในวงกว้าง
คัดลอก ARN ของ IAM Role เตรียมไว้
เมื่อสร้างเสร็จแล้วค้นหาชื่อและเข้ามาที่ IAM User ของเรา แล้วคัดลอก ARN ของ IAM Role เตรียมไว้ เพราะต้องนำไปใช้ในขั้นตอนของ การตั้งค่าไฟล์ credentials
ขั้นตอนฝั่ง Client
ติดตั้ง AWS CLI
ติดตั้ง AWS CLI บน Windows ตามลิงก์บทความด้านล่างนี้
การตั้งค่า credentials ของ AWS CLI
1. การสร้างไฟล์
สร้างไฟล์ตาม Path ต่อไปนี้
C:\Users\<ชื่อ user>\.aws\credentials
2. การตั้งค่าไฟล์ credentials
ตั้งชื่อที่ต้องการในแต่ละชื่อ profile ของ IAM User
และชื่อ profile ของ IAM Role
ถ้าไม่มีการยึดติดอะไรเป็นพิเศษ ผมคิดว่าจะจัดการง่ายกว่าถ้าเราใช้ชื่อเดียวกับชื่อ IAM User
เราจะใช้ Access key ID และ Secret access key ที่จดบันทึกไว้ในตอนที่สร้าง IAM User
โปรดตรวจสอบแล้วป้อนข้อมูล ARN ของ Assigned MFA device และ ARN ของ IAM Role ที่ต้องการ switch จาก AWS Management Console
ARN ของ Assigned MFA device มีระบุไว้ในAssigned MFA device
ตรงแท็บSecurity credentials
และให้ระวังในส่วนของ (Virtual) เพราะว่าไม่จำเป็น
และในส่วนของ Region ให้ใช้เป็นap-southeast-1
credentials
[tinnakorn-s3-mfa] aws_access_key_id = <Access key ID> aws_secret_access_key = <Secret access key> [tinnakorn-s3-mfa-role] region = ap-southeast-1 output = json mfa_serial = <ARN ของ Assigned MFA device> role_arn = <ARN ของ IAM Role ที่ต้องการ switch> source_profile = tinnakorn-s3-mfa
การติดตั้ง Cyberduck
ดาวน์โหลด Cyberduck จากเว็บไซต์ตามลิงก์ด้านล่างนี้และทำการติดตั้ง
การจัดเก็บ profiles สำหรับ AssumeRole
เมื่อเปิดลิงก์นี้ ก็จะแสดงหน้าแบบด้านล่างนี้
สร้างไฟล์ตาม Path ด้านล่างนี้ และบันทึกเนื้อหาที่แสดงตามด้านบนนี้
C:\Program Files\Cyberduck\profiles\S3 (Credentials from AWS Security Token Service).cyberduckprofile
ตรวจสอบการเชื่อมต่อไปยัง S3 ด้วย Cyberduck
ดับเบิ้ลคลิก profile ที่สร้างเมื่อสักครู่นี้
แล้วหน้าการตั้งค่าการเชื่อมต่อจะปรากฏขึ้นมา จากนั้นให้ตั้งค่าตามที่ระบุไว้ด้านล่างนี้ และคลิกปุ่มกากบาทด้านขวาบน
Bookmark จะถูกสร้างขึ้นทุกครั้งที่เปิด profile ขึ้นมา ดังนั้นตรงนี้ให้เราดับเบิ้ลคลิก Bookmark ที่เราตั้งค่าเมื่อสักครู่นี้
เมื่อหน้าจอ MFA Authentication ปรากฏขึ้นมา ให้ป้อน one-time password และคลิก Continue
ถ้าแสดงรายการ S3 Bucket แบบนี้ก็ถือว่าเสร็จแล้ว
สรุป
นี่คือบทสรุปของขั้นตอนการติดตั้งที่จำเป็นในกรณีที่ต้องการเข้าถึง S3 โดยใช้ MFA ด้วย Cyberduck เนื่องจากไม่ค่อยพบขั้นตอนที่รวมเกี่ยวกับการตั้งค่า IAM ดังนั้นผมจึงเขียนบทความนี้ขึ้นมา
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
แปลโดย: POP จากบริษัท Classmethod (Thailand) ครับ !
Link อ้างอิง
- https://cyberduck.io/
- Installing or updating the latest version of the AWS CLI
- Amazon S3 คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
- การอัปโหลดข้อมูลไปยัง Amazon S3 ด้วย CloudBerry Explorer
- เชื่อมต่อ Amazon S3 ด้วย WinSCP
ดูรายละเอียดเพิ่มเติมได้ที่นี่ | สอบถามเพิ่มเติมเกี่ยวกับ AWS คลิกที่นี่ |